# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/thermal/mediatek,lvts-thermal.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: MediaTek SoC Low Voltage Thermal Sensor (LVTS)

maintainers:
  - Balsam CHIHI <bchihi@baylibre.com>

description: |
  LVTS is a thermal management architecture composed of three subsystems,
  a Sensing device - Thermal Sensing Micro Circuit Unit (TSMCU),
  a Converter - Low Voltage Thermal Sensor converter (LVTS), and
  a Digital controller (LVTS_CTRL).

properties:
  compatible:
    enum:
      - mediatek,mt8192-lvts-ap
      - mediatek,mt8192-lvts-mcu
      - mediatek,mt8195-lvts-ap
      - mediatek,mt8195-lvts-mcu

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  resets:
    maxItems: 1
    description: LVTS reset for clearing temporary data on AP/MCU.

  nvmem-cells:
    minItems: 1
    items:
      - description: Calibration eFuse data 1 for LVTS
      - description: Calibration eFuse data 2 for LVTS

  nvmem-cell-names:
    minItems: 1
    items:
      - const: lvts-calib-data-1
      - const: lvts-calib-data-2

  "#thermal-sensor-cells":
    const: 1

allOf:
  - $ref: thermal-sensor.yaml#

  - if:
      properties:
        compatible:
          contains:
            enum:
              - mediatek,mt8192-lvts-ap
              - mediatek,mt8192-lvts-mcu
    then:
      properties:
        nvmem-cells:
          maxItems: 1

        nvmem-cell-names:
          maxItems: 1

  - if:
      properties:
        compatible:
          contains:
            enum:
              - mediatek,mt8195-lvts-ap
              - mediatek,mt8195-lvts-mcu
    then:
      properties:
        nvmem-cells:
          minItems: 2

        nvmem-cell-names:
          minItems: 2

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - resets
  - nvmem-cells
  - nvmem-cell-names
  - "#thermal-sensor-cells"

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/clock/mt8195-clk.h>
    #include <dt-bindings/reset/mt8195-resets.h>
    #include <dt-bindings/thermal/mediatek,lvts-thermal.h>

    soc {
      #address-cells = <2>;
      #size-cells = <2>;

      lvts_mcu: thermal-sensor@11278000 {
        compatible = "mediatek,mt8195-lvts-mcu";
        reg = <0 0x11278000 0 0x1000>;
        interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH 0>;
        clocks = <&infracfg_ao CLK_INFRA_AO_THERM>;
        resets = <&infracfg_ao MT8195_INFRA_RST4_THERM_CTRL_MCU_SWRST>;
        nvmem-cells = <&lvts_efuse_data1 &lvts_efuse_data2>;
        nvmem-cell-names = "lvts-calib-data-1", "lvts-calib-data-2";
        #thermal-sensor-cells = <1>;
      };
    };

    thermal_zones: thermal-zones {
      cpu0-thermal {
        polling-delay = <1000>;
        polling-delay-passive = <250>;
        thermal-sensors = <&lvts_mcu MT8195_MCU_LITTLE_CPU0>;

        trips {
          cpu0_alert: trip-alert {
            temperature = <85000>;
            hysteresis = <2000>;
            type = "passive";
          };

          cpu0_crit: trip-crit {
            temperature = <100000>;
            hysteresis = <2000>;
            type = "critical";
          };
        };
      };
    };
